﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;

namespace DBHelper
{
    /// <summary>
    ///数据库基本操作类，提供Access数据库基本操作，生存于数据层
    /// </summary>
    public class DBase : IDisposable
    {
        /// <summary>
        /// 数据库是否打开成功标志。成功：True，失败False。
        /// </summary>
        public bool Is_OpenState = false;

        /// <summary>
        /// Access数据库连接字符串
        /// </summary>
        private string strOleConn;

        /// <summary>
        /// Access数据库连接对象
        /// </summary>
        private OleDbConnection oleConn;

        /// <summary>
        /// 构造函数，初始化数据库连接,但不打开数据库
        /// 使用步骤:1.构造对象。2.检测Is_OpenState是否打开成功。3.操作数据库。4.自动或手工释放资源
        /// </summary>
        public DBase()
        {
            strOleConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=User.mdb;";    //数据库连接字符串
            oleConn = new OleDbConnection(strOleConn);  //实例化数据库连接对象
            Is_OpenState = Open();  //设置当前数据库打开的状态
        }

        /// <summary>
        /// 打开数据库
        /// </summary>
        /// <returns>数据库打开是否成功。</returns>
        private bool Open()
        {
            try
            {
                //如果当前连接状态为关闭状态，则打开数据库连接
                if (oleConn.State == ConnectionState.Closed)
                {
                    oleConn.Open();
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 关闭数据库
        /// </summary>
        /// <returns>数据库打开是否成功。</returns>
        private bool Close()
        {
            try
            {
                //如果当前连接状态为打开状态，则关闭数据库连接
                if (oleConn.State == ConnectionState.Open)
                {
                    oleConn.Close();
                }
                return true;
            }
            catch
            {
                return false;
            }
        }

        /// <summary>
        /// 释放资源
        /// </summary>
        public void Dispose()
        {
            Close();                //关闭连接
            if (oleConn != null)    //销毁对象
            {
                oleConn.Dispose();
            }
        }

        /// <summary>
        /// 析构函数，自动释放资源
        /// </summary>
        ~DBase()
        {
            Dispose();  //释放资源
        }

        /// <summary>
        /// 执行SqlCommand语句,返回一个DataTable
        /// </summary>
        /// <param name="sqlCommand">SqlCommand语句</param>
        /// <returns>执行成功返回DataTable对象，否则返回Null</returns>
        public DataTable GetDataTable(string sqlCommand)
        {
            DataSet ds = new DataSet();
            try
            {
                OleDbDataAdapter da = new OleDbDataAdapter(sqlCommand, oleConn);
                da.Fill(ds);
                int i = ds.Tables[0].Rows.Count;
                return ds.Tables[0];
            }
            catch(Exception ex)
            {
                string src = ex.Message;
                return null;
            }
        }

        void IDisposable.Dispose()
        {
        }
    }
}